{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style>\n",
       "    .dataframe thead tr:only-child th {\n",
       "        text-align: right;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: left;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>instant</th>\n",
       "      <th>season_1</th>\n",
       "      <th>season_2</th>\n",
       "      <th>season_3</th>\n",
       "      <th>season_4</th>\n",
       "      <th>mnth_1</th>\n",
       "      <th>mnth_2</th>\n",
       "      <th>mnth_3</th>\n",
       "      <th>mnth_4</th>\n",
       "      <th>mnth_5</th>\n",
       "      <th>...</th>\n",
       "      <th>weekday_5</th>\n",
       "      <th>weekday_6</th>\n",
       "      <th>temp</th>\n",
       "      <th>atemp</th>\n",
       "      <th>hum</th>\n",
       "      <th>windspeed</th>\n",
       "      <th>holiday</th>\n",
       "      <th>workingday</th>\n",
       "      <th>yr</th>\n",
       "      <th>cnt</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0.355170</td>\n",
       "      <td>0.373517</td>\n",
       "      <td>0.828620</td>\n",
       "      <td>0.284606</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>985</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.379232</td>\n",
       "      <td>0.360541</td>\n",
       "      <td>0.715771</td>\n",
       "      <td>0.466215</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>801</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.171000</td>\n",
       "      <td>0.144830</td>\n",
       "      <td>0.449638</td>\n",
       "      <td>0.465740</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.175530</td>\n",
       "      <td>0.174649</td>\n",
       "      <td>0.607131</td>\n",
       "      <td>0.284297</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1562</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>...</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>0.209120</td>\n",
       "      <td>0.197158</td>\n",
       "      <td>0.449313</td>\n",
       "      <td>0.339143</td>\n",
       "      <td>0</td>\n",
       "      <td>1</td>\n",
       "      <td>0</td>\n",
       "      <td>1600</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 35 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "   instant  season_1  season_2  season_3  season_4  mnth_1  mnth_2  mnth_3  \\\n",
       "0        1         1         0         0         0       1       0       0   \n",
       "1        2         1         0         0         0       1       0       0   \n",
       "2        3         1         0         0         0       1       0       0   \n",
       "3        4         1         0         0         0       1       0       0   \n",
       "4        5         1         0         0         0       1       0       0   \n",
       "\n",
       "   mnth_4  mnth_5  ...   weekday_5  weekday_6      temp     atemp       hum  \\\n",
       "0       0       0  ...           0          1  0.355170  0.373517  0.828620   \n",
       "1       0       0  ...           0          0  0.379232  0.360541  0.715771   \n",
       "2       0       0  ...           0          0  0.171000  0.144830  0.449638   \n",
       "3       0       0  ...           0          0  0.175530  0.174649  0.607131   \n",
       "4       0       0  ...           0          0  0.209120  0.197158  0.449313   \n",
       "\n",
       "   windspeed  holiday  workingday  yr   cnt  \n",
       "0   0.284606        0           0   0   985  \n",
       "1   0.466215        0           0   0   801  \n",
       "2   0.465740        0           1   0  1349  \n",
       "3   0.284297        0           1   0  1562  \n",
       "4   0.339143        0           1   0  1600  \n",
       "\n",
       "[5 rows x 35 columns]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "\n",
    "# 模型\n",
    "from sklearn.linear_model import LinearRegression, RidgeCV, LassoCV, ElasticNetCV\n",
    "\n",
    "# 模型评估\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from sklearn.metrics import r2_score  # 评价回归预测模型的性能\n",
    "\n",
    "# 可视化\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "\n",
    "\n",
    "keys_X = ['season_1', 'season_2', 'season_3', 'season_4', 'mnth_1',\n",
    "          'mnth_2', 'mnth_3', 'mnth_4', 'mnth_5', 'mnth_6', 'mnth_7', 'mnth_8',\n",
    "          'mnth_9', 'mnth_10', 'mnth_11', 'mnth_12', 'weathersit_1',\n",
    "          'weathersit_2', 'weathersit_3', 'weekday_0', 'weekday_1', 'weekday_2',\n",
    "          'weekday_3', 'weekday_4', 'weekday_5', 'weekday_6', 'temp', 'atemp',\n",
    "          'hum', 'windspeed', 'holiday', 'workingday', 'yr']\n",
    "\n",
    "data = pd.read_csv('FE_day.csv')\n",
    "data.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "train samples: (584, 34)\n"
     ]
    }
   ],
   "source": [
    "y = data['cnt']\n",
    "X = data.drop(['cnt'], axis=1)\n",
    "\n",
    "## \\3. 对全体数据，随机选择其中80%做训练数据，剩下20%为测试数据，\n",
    "# 评价指标为RMSE。（10分）\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)\n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)\n",
    "\n",
    "print(\"train samples:\", X_train.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Index(['season_1', 'season_2', 'season_3', 'season_4', 'mnth_1', 'mnth_2',\n",
      "       'mnth_3', 'mnth_4', 'mnth_5', 'mnth_6', 'mnth_7', 'mnth_8', 'mnth_9',\n",
      "       'mnth_10', 'mnth_11', 'mnth_12', 'weathersit_1', 'weathersit_2',\n",
      "       'weathersit_3', 'weekday_0', 'weekday_1', 'weekday_2', 'weekday_3',\n",
      "       'weekday_4', 'weekday_5', 'weekday_6', 'temp', 'atemp', 'hum',\n",
      "       'windspeed', 'holiday', 'workingday', 'yr'],\n",
      "      dtype='object')\n"
     ]
    }
   ],
   "source": [
    "#ID不参与预测\n",
    "X_train = X_train.drop(['instant'], axis=1)\n",
    "X_test = X_test.drop(['instant'], axis=1)\n",
    "\n",
    "# 保存特征名字以备后用（可视化）\n",
    "feat_names = X_train.columns\n",
    "print(X_train.keys())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 752.267312731\n",
      "RMSE on Test set : 785.837721432\n",
      "r2_score on Training set : 0.843672711809\n",
      "r2_score on Test set : 0.854803624095\n",
      "(33,)\n",
      "Ridge picked 33 features and eliminated the other 0 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c1ec6ed278>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def Linear_test():\n",
    "    lr = LinearRegression()\n",
    "    lr.fit(X_train, y_train)\n",
    "\n",
    "    y_train_pred = lr.predict(X_train)\n",
    "    y_test_pred = lr.predict(X_test)\n",
    "\n",
    "    rmse_train = np.sqrt(mean_squared_error(y_train, y_train_pred))\n",
    "    rmse_test = np.sqrt(mean_squared_error(y_test, y_test_pred))\n",
    "    print(\"RMSE on Training set :\", rmse_train)\n",
    "    print(\"RMSE on Test set :\", rmse_test)\n",
    "    r2_score_train = r2_score(y_train, y_train_pred)\n",
    "    r2_score_test = r2_score(y_test, y_test_pred)\n",
    "    print(\"r2_score on Training set :\", r2_score_train)\n",
    "    print(\"r2_score on Test set :\", r2_score_test)\n",
    "    print(lr.coef_.shape)   # (34,)\n",
    "\n",
    "    # Plot important coefficients\n",
    "    coefs = pd.Series(lr.coef_, index = feat_names)\n",
    "    print(\"Ridge picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" +  \\\n",
    "          str(sum(coefs == 0)) + \" features\")\n",
    "\n",
    "    #正系数值最大的10个特征和负系数值最小（绝对值大）的10个特征\n",
    "    imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                         coefs.sort_values().tail(10)])\n",
    "    imp_coefs.plot(kind = \"barh\")\n",
    "    plt.title(\"Coefficients in the OLS Model\")\n",
    "\n",
    "Linear_test()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "best alpha :  0.96\n",
      "RMSE on Training set : 753.933333384\n",
      "RMSE on Test set : 777.126091992\n",
      "r2_score on Training set : 0.842979519682\n",
      "r2_score on Test set : 0.85800501237\n",
      "Ridge picked 33 features and eliminated the other 0 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\nAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c1f023c588>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c1e7c09b70>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "def RidgCV_test():\n",
    "    alphas = [i/100 for i in range(1, 1000)]\n",
    "    ridge = RidgeCV(alphas=alphas, store_cv_values=True)\n",
    "\n",
    "    ridge.fit(X_train, y_train)\n",
    "    alpha = ridge.alpha_  # 通过交叉验证得到的最佳超参数alpha\n",
    "    print('best alpha : ', alpha)\n",
    "    rmse_cv = np.sqrt(np.mean(ridge.cv_values_,axis=0))\n",
    "#     print('cv of rmse: ' , rmse_cv) # 交叉验证估计的测试误差\n",
    "\n",
    "    # 训练上测试，训练误差，实际任务中这一步不需要\n",
    "    y_train_pred = ridge.predict(X_train)\n",
    "    rmse_train = np.sqrt(mean_squared_error(y_train,y_train_pred))\n",
    "\n",
    "    y_test_pred = ridge.predict(X_test)\n",
    "    rmse_test = np.sqrt(mean_squared_error(y_test, y_test_pred))\n",
    "\n",
    "    print(\"RMSE on Training set :\", rmse_train)\n",
    "    print(\"RMSE on Test set :\", rmse_test)\n",
    "\n",
    "    r2_score_train = r2_score(y_train,y_train_pred)\n",
    "    r2_score_test = r2_score(y_test,y_test_pred)\n",
    "    print(\"r2_score on Training set :\", r2_score_train)\n",
    "    print(\"r2_score on Test set :\", r2_score_test)\n",
    "    \"\"\"\n",
    "    cv of rmse:  [  803.68354877   800.42806695   799.58231128   831.68362477  1008.30035251\n",
    "      1341.71206857]\n",
    "    RMSE on Training set : 755.174044371\n",
    "    RMSE on Test set : 778.125407136\n",
    "    r2_score on Training set : 0.842462292688\n",
    "    r2_score on Test set : 0.857639591682\n",
    "    \"\"\"\n",
    "    coefs = pd.Series(ridge.coef_, index=feat_names)\n",
    "    print(\"Ridge picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" + \\\n",
    "          str(sum(coefs == 0)) + \" features\")\n",
    "\n",
    "    # 正系数值最大的10个特征和负系数值最小（绝对值大）的10个特征\n",
    "    imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                           coefs.sort_values().tail(10)])\n",
    "    imp_coefs.plot(kind=\"barh\")\n",
    "    plt.title(\"Coefficients in the Ridge Model\")\n",
    "    plt.show()\n",
    "\n",
    "    mse_mean = np.mean(ridge.cv_values_, axis=0)\n",
    "    plt.plot(np.log10(alphas), mse_mean.reshape(len(alphas), 1))\n",
    "\n",
    "    plt.xlabel('log(alpha)')\n",
    "    plt.ylabel('mse')\n",
    "    plt.show()\n",
    "    \n",
    "RidgCV_test()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Best alpha : 2.33645316605\n",
      "cv of rmse : 828.555046051\n",
      "Lasso picked 27 features and eliminated the other 6 features\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c1f006dd68>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1c1f0460c88>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "RMSE on Training set : 754.265627584\n",
      "RMSE on Test set : 786.623058576\n",
      "r2_score on Training set : 0.842841076424\n",
      "r2_score on Test set : 0.854513271312\n"
     ]
    }
   ],
   "source": [
    "def Lasso_test():\n",
    "    alphas = [i / 10 for i in range(1, 100)]\n",
    "    X_train.head()\n",
    "    \n",
    "    lasso = LassoCV()\n",
    "\n",
    "    # 2.模型训练\n",
    "    lasso.fit(X_train, y_train)\n",
    "    alpha = lasso.alpha_\n",
    "    print(\"Best alpha :\", alpha)\n",
    "\n",
    "    # 3. 模型性能：cv\n",
    "    mse_cv = np.mean(lasso.mse_path_, axis=1)\n",
    "    rmse_cv = np.sqrt(mse_cv)\n",
    "    print(\"cv of rmse :\", min(rmse_cv))\n",
    "\n",
    "    # 4. 特征重要性\n",
    "    # Plot important coefficients\n",
    "    coefs = pd.Series(lasso.coef_, index=feat_names)\n",
    "    print(\"Lasso picked \" + str(sum(coefs != 0)) + \" features and eliminated the other \" + \\\n",
    "          str(sum(coefs == 0)) + \" features\")\n",
    "    imp_coefs = pd.concat([coefs.sort_values().head(10),\n",
    "                           coefs.sort_values().tail(10)])\n",
    "    imp_coefs.plot(kind=\"barh\")\n",
    "    plt.title(\"Coefficients in the Lasso Model\")\n",
    "    plt.show()\n",
    "\n",
    "    # 5. 显示不同alpha对应的模型性能\n",
    "    plt.plot(np.log10(lasso.alphas_), mse_cv)\n",
    "\n",
    "    plt.xlabel('log(alpha)')\n",
    "    plt.ylabel('mse')\n",
    "    plt.show()\n",
    "\n",
    "    # 训练误差\n",
    "    y_train_pred = lasso.predict(X_train)\n",
    "    rmse_train = np.sqrt(mean_squared_error(y_train, y_train_pred))\n",
    "    print(\"RMSE on Training set :\", rmse_train)\n",
    "\n",
    "    # 测试误差\n",
    "    y_test_pred = lasso.predict(X_test)\n",
    "    rmse_test = np.sqrt(mean_squared_error(y_test, y_test_pred))\n",
    "    print(\"RMSE on Test set :\", rmse_test)\n",
    "\n",
    "    r2_score_train = r2_score(y_train, y_train_pred)\n",
    "    r2_score_test = r2_score(y_test, y_test_pred)\n",
    "    print(\"r2_score on Training set :\", r2_score_train)\n",
    "    print(\"r2_score on Test set :\", r2_score_test)\n",
    "    \n",
    "Lasso_test()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    ""
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3.0
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.2"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}